package com.lavegue.webaction;

import java.io.File;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.servlet.ServletContext;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.lavegue.common.BaseAction;
import com.lavegue.common.Constants;
import com.lavegue.model.Area;
import com.lavegue.model.Company;
import com.lavegue.model.UserInfo;
import com.lavegue.service.AreaService;
import com.lavegue.service.CompanyService;
import com.lavegue.service.UserInfoService;
import com.lavegue.util.VerifyCodeImg;

public class RegisterAction extends BaseAction{
	//登录账户
	private String account;
	//获取修改密码页面的密码字段
	private String password;  
	
	//验证码
	private String securityCode;
	
	private UserInfo user;
	private UserInfoService userInfoService;
	private AreaService areaService;
	private String picFilePath;
	
	private CompanyService companyService;
	private String ActionError; // 界面显示的错误信息
	// 省列表
	private List<Area> provinces;
	// 城市列表
	private List<Area> cityList;
	// 区域列表
	private List<Area> areaList;
	// 省份ID
	private Integer sf_id;
	// 城市ID
	private Integer cs_id;
	// 区域ID
	private Integer qy_id;
	private String sfName;
	private String csName;
	private String quName;
	
	// 图片文件
	private File pic;
	
	public File getPic() {
		return pic;
	}
	public void setPic(File pic) {
		this.pic = pic;
	}
	public Integer getSf_id() {
		return sf_id;
	}
	public void setSf_id(Integer sfId) {
		sf_id = sfId;
	}
	public Integer getCs_id() {
		return cs_id;
	}
	public void setCs_id(Integer csId) {
		cs_id = csId;
	}
	public Integer getQy_id() {
		return qy_id;
	}
	public void setQy_id(Integer qyId) {
		qy_id = qyId;
	}
	
	public String getSfName() {
		return sfName;
	}
	public void setSfName(String sfName) {
		this.sfName = sfName;
	}
	public String getCsName() {
		return csName;
	}
	public void setCsName(String csName) {
		this.csName = csName;
	}
	public String getQuName() {
		return quName;
	}
	public void setQuName(String quName) {
		this.quName = quName;
	}
	public List<Area> getProvinces() {
		return provinces;
	}
	public void setProvinces(List<Area> provinces) {
		this.provinces = provinces;
	}
	public List<Area> getCityList() {
		return cityList;
	}
	public void setCityList(List<Area> cityList) {
		this.cityList = cityList;
	}
	public List<Area> getAreaList() {
		return areaList;
	}
	public void setAreaList(List<Area> areaList) {
		this.areaList = areaList;
	}
	public String getActionError() {
		return ActionError;
	}
	public void setActionError(String actionError) {
		ActionError = actionError;
	}
	public UserInfo getUser() {
		return user;
	}
	public void setUser(UserInfo user) {
		this.user = user;
	}
	public UserInfoService getUserInfoService() {
		return userInfoService;
	}
	public void setUserInfoService(UserInfoService userInfoService) {
		this.userInfoService = userInfoService;
	}

	public AreaService getAreaService() {
		return areaService;
	}
	public void setAreaService(AreaService areaService) {
		this.areaService = areaService;
	}
	public CompanyService getCompanyService() {
		return companyService;
	}
	public void setCompanyService(CompanyService companyService) {
		this.companyService = companyService;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
	public String getAccount() {
		return account;
	}
	public void setAccount(String account) {
		this.account = account;
	}
	public String getSecurityCode() {
		return securityCode;
	}
	public void setSecurityCode(String securityCode) {
		this.securityCode = securityCode;
	}

	public String getPicFilePath() {
		return picFilePath;
	}
	public void setPicFilePath(String picFilePath) {
		this.picFilePath = picFilePath;
	}
	/**
	 * 用户注册
	 * @return
	 */
	public String doUserReg(){
//		String companyName = user.getCompany().getCompanyName();
//		Integer companyID = user.getCompany().getId();
		 //根据公司名称查询
//		 Company company = companyService.findCompanyByName(null,companyID);
//		 user.setCompany(company);
		 UserInfo uInfo = userInfoService.findUserInfoByAccount(user.getAccount());
		 if(null != uInfo){   //号码重复
			 ActionError = "注册帐号已存在!";
			 return doForwordRegPage();
		 }else{
			 ActionError = "";
		
		 }
		 // 20120116
		 try {
			 Date date = new Date();
			 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
			 date = sdf.parse(sdf.format(date));
			 user.setAddDate(date); //添加的时间
			 user.setRecentlyLoginDate(date); //最近登录时间
			 //20120131 设置初始值
			 user.setType(Integer.valueOf(0)); //帐号类型[0表示普通,1表示vip]
		 } catch (Exception e) {
			e.printStackTrace();
		 }
		 user.setBalance(new BigDecimal(0.00));
		 
		 boolean userFalg = userInfoService.userRegisterInfo(user);
			if(!userFalg){
				ActionError = "服务器异常，请联系管理员!";
				return "RegInput";
			}else{
				// 先清除session中user
				removeSession(Constants.SESSION_USER);
				
				String account = user.getAccount(); //获取用户号码

				setRequestAtrribute("userAccount", account);
				return "regSuccess";
		}
	
	}
	/**20111221
	 * 跳转到注册页面然后加载数据
	 */
	public String doForwordRegPage(){
		//获取所有的公司名称
		List<Company> comList = companyService.findByCompany();
		// 获取省列表,在前台显示省份
		provinces = areaService.findAreaByParendIdAndlvType(Area.NO_PARENT,
				Area.AreaType.PROVINCE);
		
		setRequestAtrribute("companyList", comList);
		
		return "RegInput";
	}
		
	/**
	 * ljp 20111222 修改用户密码功能
	 */
	public String doMoidyPwd() {
		UserInfo sesUser = (UserInfo) getSessionAtrribute(Constants.SESSION_USER);
		// 判断用户信息是否存在
		if (null == sesUser) {
			return "g_login"; // 不存在跳转到登录页面
		}
		System.out.println("修改的用户密码.....="+password);
		sesUser.setPassword(password);
		// ljp 20101110 密码加密
//		sesUser.setUserPwd(YejueUtil.getEncryptedPassword(password.toLowerCase()));
		// 修改用户密码
		boolean modifyResult = userInfoService.modifyUserPassword(sesUser);
		if (!modifyResult) {
			ActionError = "服务器异常，请联系管理员!";

			return "modPwdSuccess_Fail";
		} else {
			// 先清除session中user
			removeSession(Constants.SESSION_USER);

			sesUser.setPassword(password);
			// 在把新user放入session中
			setSessionAtrribute(Constants.SESSION_USER, sesUser);
			ActionError = "用户密码修改成功!";
			return "enterModPwdPage" ;
		}
	}
	
	
	/**
	 * ljp 20111222 跳转到进入修改用户密码页面
	 * @return
	 */
	public String toEnterModUserPwd() {
		// 判断用户信息是否存在
//		UserInfo user = (UserInfo) getSessionAtrribute(Constants.SESSION_USER);
//		if (null == user) {
//			return "login"; // 不存在跳转到登录页面
//		}
		if (this.getSessionUser() == null) {
			return G_LOGIN_PAGE;
		}
		return "enterModPwdPage";
	}
	
	/**
	 * ljp 20120218 跳转到进入修改密码问题页面
	 * @return
	 */
	public String toEnterModPwdQuestion() {
		// 判断用户信息是否存在
		UserInfo user = (UserInfo) getSessionAtrribute(Constants.SESSION_USER);
		if (null == user) {
			return G_LOGIN_PAGE; // 不存在跳转到登录页面
		}

		return "enterModPwdQuestionPage";
	}
	
	/**
	 * ljp 20120218 修改密码问题和答案的功能
	 */
	public String doMoidyPwdQuestionAndAnswer() {
		UserInfo sesUser = (UserInfo) getSessionAtrribute(Constants.SESSION_USER);
		// 判断用户信息是否存在
		if (null == sesUser) {
			return "g_login"; // 不存在跳转到登录页面
		}
		
		if(null != user){
			sesUser.setPwdQuestion(user.getPwdQuestion());
			sesUser.setPwdAnswer(user.getPwdAnswer());
		}
		// ljp 20101110 密码加密
//		sesUser.setUserPwd(YejueUtil.getEncryptedPassword(password.toLowerCase()));
		// 修改用户密码
		boolean modifyResult = userInfoService.modifyUserPassword(sesUser);
		if (!modifyResult) {
			ActionError = "服务器异常，请联系管理员!";

			return "enterModPwdQuestionPage";
		} else {
			// 先清除session中user
			removeSession(Constants.SESSION_USER);

			// 在把新user放入session中
			setSessionAtrribute(Constants.SESSION_USER, sesUser);
			ActionError = "密码查询问题修改成功!";
			return "enterModPwdQuestionPage" ;
		}
	}
	
	/**
	 * ljp 20111222 跳转到进入显示用户信息页面
	 * @return
	 */
	public String toShowUserInfoPage() { 
		if (this.getSessionUser() == null) {
			return G_LOGIN_PAGE;
		}
		// 判断用户信息是否存在
//		UserInfo user = (UserInfo) getSessionAtrribute(Constants.SESSION_USER);
//		if (null == user) {
//			return "login"; // 跳转到登录页面
//		}
		UserInfo userInfo = this.getSessionUser();//假数据测试
//		System.out.println("公司ID===="+userInfo.getCompany().getId());
//		System.out.println("公司名称===="+userInfo.getCompany().getCompanyName());
		 //通过省份ID查询获取名称
		 Area areaProvince = areaService.findById(Integer.valueOf(userInfo.getProvince()));
		 	sfName = areaProvince.getName(); //获取省份
		 if(null != userInfo.getCity() && !userInfo.getCity().equals("")){
			 Area areaCity = areaService.findById(Integer.valueOf(userInfo.getCity()));
			 csName = areaCity.getName(); //获取城市
		 }
		 if(null != userInfo.getZone() && !userInfo.getZone().equals("")){
			 Area areaZone = areaService.findById(Integer.valueOf(userInfo.getZone()));
			 quName = areaZone.getName();  //获取区县
		 }
		if(null != getSessionAtrribute("errFileSize")){
				removeSession("errFileSize");
		}
		setSessionAtrribute("userObject",userInfo);
		// setRequestAtrribute("verCode",verCode);
		return "showUserInfoPage"; //跳转到 showUserInfo.jsp
	}

	/**
	 * ljp 20111222  修改用户信息
	 */
	public String doModUserInfo(){
//		UserInfo chagUser = getSessionUser();
//		UserInfo user = (UserInfo) getSessionAtrribute(Constants.SESSION_USER);
//		if (null == user) {
//			return "login"; // 跳转到登录页面
//		}
		if (this.getSessionUser() == null) {
			return G_LOGIN_PAGE;
		}
	
		UserInfo chagUser = this.getSessionUser(); //假数据测试
		if (null != chagUser) {
			chagUser.setProvince(user.getProvince());  //省份
			chagUser.setCity(user.getCity());  //城市
			chagUser.setZone(user.getZone());  //区县
						
			if(null != user.getEmail() && !user.getEmail().equals("")){
				chagUser.setEmail(user.getEmail()); // email
			}else{
				chagUser.setEmail(""); // email
			}
			if(null != user.getQq() && !user.getQq().equals("")){
				chagUser.setQq(user.getQq());       //QQ号码
			}else{
				chagUser.setQq("");       //QQ号码
			}
			if(null != user.getPersonalHonepage() && !user.getPersonalHonepage().equals("")){
				chagUser.setPersonalHonepage(user.getPersonalHonepage());   //个人主页
			}else {
				chagUser.setPersonalHonepage("");   //个人主页
			}
			if(null != user.getPersonalIntro() && !user.getPersonalIntro().equals("")){
				chagUser.setPersonalIntro(user.getPersonalIntro());   //个人介绍
			}else {
				chagUser.setPersonalIntro("");   //个人介绍
			}
			
		}
//		if(null != picFilePath && !picFilePath.equals("")){
//			chagUser.setPersonalIco(picFilePath);
//		}
		
		if(null != getSessionAtrribute("imgIcoPath")){
			 //设置图片路径在页面获取(userInfoModify.jsp)
			 String personalIco = (String)getSessionAtrribute("imgIcoPath");
			 if(null != personalIco && !personalIco.equals("")){
				 chagUser.setPersonalIco(personalIco);  //图片路径
			 }
		 }
		// 修改个人用户信息
		boolean modifyResult = userInfoService.modifyUserInfo(chagUser);
		if (!modifyResult) {
			ActionError = "服务器异常，请联系管理员!";

			return "userModifyResult";
		} else {
			// 先清除session中user
			removeSession(Constants.SESSION_USER);

			// 在把新user放入session中
			setSessionAtrribute(Constants.SESSION_USER, chagUser);
			ActionError = "个人基本信息修改成功!";
			return toShowUserInfoPage();
		}

	}
	
	/**
	 * ljp 20120112 跳转到进入显示用户信息修改页面
	 * @return
	 */
	public String toFileUploadEnterModUserPage(){
		if (this.getSessionUser() == null) {
			return G_LOGIN_PAGE;
		}
		UserInfo userInfo = this.getSessionUser(); //假数据测试
		// 判断用户信息是否存在
//		UserInfo user = (UserInfo) getSessionAtrribute(Constants.SESSION_USER);
//		if (null == user) {
//			return "login"; // 不存在跳转到登录页面
//		}
		
		String chengshi = "";
		String  quyu = "";
		 //通过省份ID查询获取名称
		 Area areaProvince = areaService.findById(Integer.valueOf(userInfo.getProvince()));
		 if(null != userInfo.getCity() && !userInfo.getCity().equals("")){
			 Area areaCity = areaService.findById(Integer.valueOf(userInfo.getCity()));
			 chengshi = areaCity.getName(); //获取城市
		 }
		 if(null != userInfo.getZone() && !userInfo.getZone().equals("")){
			 Area areaZone = areaService.findById(Integer.valueOf(userInfo.getZone()));
			 quyu = areaZone.getName();  //获取区县
		 }
		 
		
		// 所在地
		// 获取省列表,在前台显示省份，页面获取值<*>
		provinces = areaService.findAreaByParendIdAndlvType(Area.NO_PARENT,
				Area.AreaType.PROVINCE);
		String shengfen = areaProvince.getName(); //获取省份
		
		// 查询省份的一条记录
		List<Area> sfList = areaService.findAreaByNameTypeid(shengfen,Area.AreaType.PROVINCE); 
		for (int i = 0; i < sfList.size(); i++) {
			Area sf_area = sfList.get(i);
			sf_id = sf_area.getId(); // 得到省份ID<*>
			// 通过省份ID查询所有城市，页面获取值<*>
			cityList = areaService.findAreaByParendIdAndlvType(sf_id,Area.AreaType.CITY);
			   // 查询城市的一条记录
				if(!chengshi.equals("")){
					List<Area> csList = areaService.findAreaByName(chengshi, sf_id);
					for (int j = 0; j < csList.size(); j++){
						Area cs_area = csList.get(j);
						cs_id = cs_area.getId(); // 得到城市ID<*>

						// 通过城市ID查询所有的区域，页面获取值<*>
						areaList = areaService.findAreaByParendIdAndlvType(cs_id, Area.AreaType.AREA);
						
						// 查询区域的一条记录
						if(!quyu.equals("")){
							List<Area> qyList = areaService.findAreaByName(quyu, cs_id); 
							for (int k = 0; k < qyList.size(); k++) {
								Area qy_area = qyList.get(j);
								qy_id = qy_area.getId(); // 得到区域ID<*>
							}
						}
						
					}
				}else{
					areaList = new ArrayList<Area>();
				}
				 
		}
//		HttpServletRequest request = ServletActionContext.getRequest();
				
		// 在把新user放入session中
		setSessionAtrribute(Constants.SESSION_USER, userInfo);
	
		return "enterUserInfoModifyPage";
	}
	
	public void initMethodArea() {
		String shengfen = "";
		String chengshi = "";
		String  quyu = "";
		// 获取省列表,在前台显示省份
		provinces = areaService.findAreaByParendIdAndlvType(Area.NO_PARENT,
				Area.AreaType.PROVINCE);
		if(null != user){
			if(null != user.getProvince() && !user.getProvince().equals("")){
				String provinceid =	user.getProvince(); //省份ID
				//通过省份ID查询获取名称
				 Area areaProvince = areaService.findById(Integer.valueOf(provinceid));
				 shengfen = areaProvince.getName(); //获取省份
			 }
			 
			 if(null != user.getCity() && !user.getCity().equals("")){
				 String cityid =user.getCity();  //城市ID
				 Area areaCity = areaService.findById(Integer.valueOf(cityid));
				 chengshi = areaCity.getName(); //获取城市
			 }
			 if(null != user.getZone() && !user.getZone().equals("")){
				 String zoneid= user.getZone();   //区县ID
				 Area areaZone = areaService.findById(Integer.valueOf(zoneid));
				 quyu = areaZone.getName();  //获取区县
			 }

			 if(shengfen.equals("")){
				 Area area = new Area();
					area.setId(0);
					area.setName("请选择...");
				 cityList = new ArrayList<Area>();
				 cityList.add(area);
				 areaList = new ArrayList<Area>();
				 areaList.add(area);
			 }else {
				// 查询省份的一条记录
				List<Area> sfList = areaService.findAreaByNameTypeid(shengfen,Area.AreaType.PROVINCE); 
				for (int i = 0; i < sfList.size(); i++) {
					Area sf_area = sfList.get(i);
					sf_id = sf_area.getId(); // 得到省份ID<*>
					// 通过省份ID查询所有城市，页面获取值<*>
					cityList = areaService.findAreaByParendIdAndlvType(sf_id,Area.AreaType.CITY);
					   // 查询城市的一条记录
						if(!chengshi.equals("")){
							List<Area> csList = areaService.findAreaByName(chengshi, sf_id);
							for (int j = 0; j < csList.size(); j++){
								Area cs_area = csList.get(j);
								cs_id = cs_area.getId(); // 得到城市ID<*>
								
//								Area area = new Area();
//								area.setId(0);
//								area.setName("请选择...");
								
								// 通过城市ID查询所有的区域，页面获取值<*>
								areaList = areaService.findAreaByParendIdAndlvType(cs_id, Area.AreaType.AREA);
								//areaList.add(0, area);
								// 查询区域的一条记录
								if(!quyu.equals("")){
									List<Area> qyList = areaService.findAreaByName(quyu, cs_id); 
									for (int k = 0; k < qyList.size(); k++) {
										Area qy_area = qyList.get(j);
										qy_id = qy_area.getId(); // 得到区域ID<*>
									}
								}
							}
						}else{
							Area area = new Area();
//							area.setId(0);
//							area.setName("请选择...");
//							cityList.add(0, area);
							areaList = new ArrayList<Area>();
							//areaList.add(area);
						}
						 

				}
			}
//			 HttpServletRequest request = ServletActionContext.getRequest();
//			 request.setAttribute("user", user);
			// setRequestAtrribute("user", user);
		}	
	
	}
	
	/**
	 * ljp 20111222 跳转到进入显示用户信息修改页面
	 * @return
	 */
	public String toEnterModUserPage(){
		if (this.getSessionUser() == null) {
			return G_LOGIN_PAGE;
		}
		UserInfo userInfo = this.getSessionUser(); //假数据测试
		// 判断用户信息是否存在
//		UserInfo user = (UserInfo) getSessionAtrribute(Constants.SESSION_USER);
//		if (null == user) {
//			return "login"; // 不存在跳转到登录页面
//		}
		
		String chengshi = ""; //获取城市
		String  quyu = ""; //获取区县
		 //通过省份ID查询获取名称
		 Area areaProvince = areaService.findById(Integer.valueOf(userInfo.getProvince()));
		 if(null != userInfo.getCity() && !userInfo.getCity().equals("")){
			 Area areaCity = areaService.findById(Integer.valueOf(userInfo.getCity()));
			 chengshi = areaCity.getName(); //获取城市
		 }
		 if(null != userInfo.getZone() && !userInfo.getZone().equals("")){
			 Area areaZone = areaService.findById(Integer.valueOf(userInfo.getZone()));
			 quyu = areaZone.getName();  //获取区县
		 }
		// 所在地
		// 获取省列表,在前台显示省份，页面获取值<*>
		provinces = areaService.findAreaByParendIdAndlvType(Area.NO_PARENT,
				Area.AreaType.PROVINCE);
		String shengfen = areaProvince.getName(); //获取省份

		// 查询省份的一条记录
		List<Area> sfList = areaService.findAreaByNameTypeid(shengfen,Area.AreaType.PROVINCE); 
		for (int i = 0; i < sfList.size(); i++) {
			Area sf_area = sfList.get(i);
			sf_id = sf_area.getId(); // 得到省份ID<*>
			// 通过省份ID查询所有城市，页面获取值<*>
			cityList = areaService.findAreaByParendIdAndlvType(sf_id,Area.AreaType.CITY);
			   // 查询城市的一条记录
				if(!chengshi.equals("")){
					List<Area> csList = areaService.findAreaByName(chengshi, sf_id);
					for (int j = 0; j < csList.size(); j++){
						Area cs_area = csList.get(j);
						cs_id = cs_area.getId(); // 得到城市ID<*>

						// 通过城市ID查询所有的区域，页面获取值<*>
						areaList = areaService.findAreaByParendIdAndlvType(cs_id, Area.AreaType.AREA);
						
						// 查询区域的一条记录
						if(!quyu.equals("")){
							List<Area> qyList = areaService.findAreaByName(quyu, cs_id); 
							for (int k = 0; k < qyList.size(); k++) {
								Area qy_area = qyList.get(j);
								qy_id = qy_area.getId(); // 得到区域ID<*>
							}
						}
						
					}
				}else{
					areaList = new ArrayList<Area>();
				}
		}
//		HttpServletRequest request = ServletActionContext.getRequest();
		if(null != getSessionAtrribute("imgIcoPath")){
			removeSession("imgIcoPath");
		}
		// 在把新user放入session中
		//setSessionAtrribute(Constants.SESSION_USER, userInfo);
		this.user = userInfo;
	
		return "enterUserInfoModifyPage";
	}
	
	
	public String toRetrievedPwdPage(){
		// 清除session中user
		removeSession("retUserObj");
		return "retrievedPwd1";
	}
	//找回密码 1页面的跳转
	public String fwdRetrievedPwd1(){
		UserInfo userInfo = userInfoService.findUserInfoByAccount(account);
		String code = (String) this.getSessionAtrribute(VerifyCodeImg.VALID_CODE_KEY);
		//检查验证码
		if (!code.equals(securityCode)) {
			this.addFieldError("securityCode", "输入的验证码有误.");
			return "retrievedPwd1";
		}
		
		if(null != userInfo){
			//String pwdAnswer = userInfo.getPwdAnswer();  //获取密码查询答案
			setSessionAtrribute("retUserObj", userInfo);//放入会话中到[找回密码]第三个页面获取帐号
			//this.setRequestAtrribute("pwdAnswer", pwdAnswer); 存入请求中到retrievedPwd2.jsp页面获取
		}
		else{
			ActionError ="输入的登录账号不存在!";
			return "errorPage";  //返回错误页面
		}
		
		// 跳转到 retrievedPwd2.jsp页面
		return "retrievedPwd2";
	}
	//找回密码 2页面的跳转
	public String fwdRetrievedPwd2(){
		UserInfo userInfo = (UserInfo)getSessionAtrribute("retUserObj");
		if(null == userInfo){
			ActionError ="账号信息不存在.";
			return "errorPage";  //返回错误页面
		}
		// 跳转到 retrievedPwd3.jsp页面
		return "retrievedPwd3";
	}
	
	//找回密码 3页面的跳转
	public String toRetrievedPwd3(){
		UserInfo userInfo = (UserInfo)getSessionAtrribute("retUserObj");
		if(null == userInfo){
			ActionError ="账号信息不存在.";
			return "errorPage";  //返回错误页面
		}
		userInfo.setPassword(password);//重置新密码
		boolean modifyResult =userInfoService.modifyUserPassword(userInfo);  //修改密码的方法
		if (!modifyResult) {
			ActionError = "服务器异常，请联系管理员!";

			return "retrievedPwdSuccess";
		}

		// 跳转到 找回密码成功的页面
		return "retrievedPwdSuccess";
	}
	
}
